﻿#pragma once

#include <boost/signal.hpp>
#include <queue>

#include "../../domain/configuration/GameModes.h"
#include "../../domain/configuration/GameEndReasons.h"
#include "../../domain/models/CardsCollection.h"
#include "../../domain/models/Player.h"

namespace Views {

	/** Interfejs widoku aplikacji */
	class IApplicationView
	{
	public:
		virtual ~IApplicationView() {};

		boost::signal<void (Domain::Configuration::GAME_MODE)> gameModePickEvent; /**< Zdarzenie wyboru trybu gry */

		/** Otwiera okno wyboru trybu gry */
		virtual void openGameModeDialog() = 0;
		/**
		* Wyświetla informację o przegranej zakończeniu gry
		* @param player Gracz, któremu wyświetlana jest informacja
		* @param cards Poszukiwane karty, ukryte na początku gry
		* @param reason Przyczyna porażki
		*/
		virtual void gameLost(Players::Player*, Cards::CardSet&, Domain::Configuration::GAME_END_REASON) = 0;
		/**
		* Wyświetla informację o wygranej i zakończeniu gry
		* @see gameLost(Players::Player*, Cards::CardSet&, Domain::Configuration::GAME_END_REASON)
		*/
		virtual void gameWon(Players::Player*, Cards::CardSet&, Domain::Configuration::GAME_END_REASON) = 0;
	};
}

